#ifndef  __EMPLOYEE_H__
#define  __EMPLOYEE_H__

#include  <iostream>

class Employee
{
    public:
            Employee( const char* description);
            Employee( const Employee& employee);
            virtual Employee* clone( ) const = 0;
            Employee& operator=( const Employee& employee);
            virtual int getID( ) const;
            /*
             * Should return the description and not copy of description
             */
            virtual const char* const getDescription( ) const;
            virtual void setDescription( const char* src);
            virtual ~Employee( );
            virtual std::ostream& print( std::ostream& os) const;
            virtual bool operator==( const Employee& employee) const;
            virtual bool operator==( int id) const;
            virtual bool operator!=( const Employee& employee) const;
    protected:
            Employee( );
            virtual char* copyStr( const char* desc);
            virtual void setID( int id);
    private:
            int ID;
            static int nextID;
            char* description;
            char* copyDescription( const char* desc);
};

std::ostream& operator<<( std::ostream& os, const Employee& employee);

#endif  /*__EMPLOYEE_H__*/
